package br.ufsc.aps.convocados;

import br.ufsc.inf.leobr.cliente.Jogada;
import br.ufsc.inf.leobr.cliente.OuvidorProxy;
import br.ufsc.inf.leobr.cliente.Proxy;
import br.ufsc.inf.leobr.cliente.exception.ArquivoMultiplayerException;
import br.ufsc.inf.leobr.cliente.exception.NaoConectadoException;
import br.ufsc.inf.leobr.cliente.exception.JahConectadoException;
import br.ufsc.inf.leobr.cliente.exception.NaoJogandoException;
import br.ufsc.inf.leobr.cliente.exception.NaoPossivelConectarException;
import javax.swing.JOptionPane;

public class AtorNetGames implements OuvidorProxy {

    protected Proxy proxy;
    protected AtorJogador jogo;

    public AtorNetGames(AtorJogador interfaceGrafica) {
        jogo = interfaceGrafica;
        this.proxy = Proxy.getInstance();
        proxy.addOuvinte(this);
    }

    public boolean conectar(String servidor, String nome) throws JahConectadoException, NaoPossivelConectarException, ArquivoMultiplayerException {

        Proxy.getInstance().conectar(servidor, nome);
        return true;


    }

    public void desconectar() {
        try {
            proxy.desconectar();
        } catch (NaoConectadoException e) {
        }
    }

    public void iniciarPartida() throws NaoConectadoException {

        proxy.iniciarPartida(2);
    }

    public void reiniciarPartida() {
        try {
            proxy.reiniciarPartida();
        } catch (NaoConectadoException e) {
            e.printStackTrace(System.err);
//            JOptionPane.showMessageDialog(null, e.getMessage());
        } catch (NaoJogandoException e) {
            e.printStackTrace(System.err);
//            JOptionPane.showMessageDialog(null, e.getMessage());
        }
    }

    public String informarNomeAdversario(String nome) {
        String aux1 = proxy.obterNomeAdversario(new Integer(1));
        String aux2 = proxy.obterNomeAdversario(new Integer(2));
        if (aux1.equals(nome)) {
            return aux2;
        } else {
            return aux1;
        }
    }

    public void enviarJogada(Lance jogada) {
        try {
            proxy.enviaJogada(jogada);
        } catch (NaoJogandoException ex) {
            JOptionPane.showMessageDialog(null, ex.getMessage());
        }

    }

    @Override
    public void receberJogada(Jogada jogada) {
        jogo.receberJogada(jogada);
    }

    @Override
    public void iniciarNovaPartida(Integer ordem) {
        jogo.tratarInicioPartida(ordem);
    }

    @Override
    public void finalizarPartidaComErro(String message) {
        jogo.finalizarPartidaComErro(message);
    }

    @Override
    public void receberMensagem(String msg) {
    }

    @Override
    public void tratarConexaoPerdida() {
        jogo.finalizarPartida();
    }

    @Override
    public void tratarPartidaNaoIniciada(String message) {
        //TODO
    }
}
